#include "mtthread.h"
#include "QElapsedTimer"//记录运行时间对象
#include "QDebug"
Generate::Generate(QObject *parent) : QThread(parent)
{


}

void Generate::run(){
    qDebug()<<"生成随机数的线程地址为"<<QThread::currentThread();
    QVector<int> List;
    QElapsedTimer time;
    time.start();
    for(int i=0;i<m_num;i++){
        List.push_back(qrand()%100000);
    }
   int milsce= time.elapsed();
    qDebug()<<"生成随机数使用的时间:"<<milsce<<"毫秒";
    emit sendArray(List);
}
void Generate::revnum(int snum){
    this->m_num=snum;
}



//冒泡处理子线程类
BubbleSort::BubbleSort(QObject *parent) : QThread(parent)
{

}

void BubbleSort::run(){
    qDebug()<<"冒泡排序的线程地址为"<<QThread::currentThread();
    QElapsedTimer time;
    time.start();
    int temp;
    for(int i = 0;i < mlist.size();i ++)  //采用双重循环
    {
     for(int j = 0;j < mlist.size()-i-1;++j)
     {
       if(mlist[j] > mlist[j+1])     //这里默认采用升序来排列
          {        //定义一个临时值来存储数据，以此来达到交换数值的目的
             temp = mlist[j];
             mlist[j] = mlist[j+1];
             mlist[j+1] = temp;
          }
     }
    }
   int milsce= time.elapsed();
    qDebug()<<"生成随机数使用的时间:"<<milsce<<"毫秒";
    emit finish(mlist);
}
void BubbleSort::recArray(QVector<int> slist){
    this->mlist=slist;
}


QuickSolt::QuickSolt(QObject *parent) : QThread(parent)
{

}

void QuickSolt::run(){
    qDebug()<<"冒泡排序的线程地址为"<<QThread::currentThread();
    QElapsedTimer time;
    time.start();
    quicksort(mlist,0,mlist.size()-1);
   int milsce= time.elapsed();
    qDebug()<<"生成随机数使用的时间:"<<milsce<<"毫秒";
    emit finish(mlist);
}
void QuickSolt::recArray(QVector<int> slist){
    this->mlist=slist;
}



int QuickSolt::quicksort(QVector<int> &a, int low, int high)
{
    int i = low;	//第一位
    int j = high;	//最后一位
    int key = a[i]; //将第一个数作为基准值-- 先找到一个基准值

    while (i < j)
    {
        while(i < j && a[j] >= key)
        {
            j--;
        }
        a[i] = a[j];

        while(i < j && a[i] <= key)
        {
            i++;
        }
        a[j] = a[i];
    }
    a[i] = key;
    if (i-1 > low)
    {
        quicksort(a, low, i-1);
    }

    if (i+1 < high)
    {
        quicksort(a, i+1, high);
    }

    return 0;
}
